home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / namei.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-09  |  2.8 KB  |  100 lines

  1. #ifndef _LINUX_NAMEI_H
  2. #define _LINUX_NAMEI_H
  3.  
  4. #include <linux/dcache.h>
  5. #include <linux/linkage.h>
  6. #include <linux/path.h>
  7.  
  8. struct vfsmount;
  9.  
  10. struct open_intent {
  11.     int    flags;
  12.     int    create_mode;
  13.     struct file *file;
  14. };
  15.  
  16. enum { MAX_NESTED_LINKS = 8 };
  17.  
  18. struct nameidata {
  19.     struct path    path;
  20.     struct qstr    last;
  21.     unsigned int    flags;
  22.     int        last_type;
  23.     unsigned    depth;
  24.     char *saved_names[MAX_NESTED_LINKS + 1];
  25.  
  26.     /* Intent data */
  27.     union {
  28.         struct open_intent open;
  29.     } intent;
  30. };
  31.  
  32. /*
  33.  * Type of the last component on LOOKUP_PARENT
  34.  */
  35. enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND};
  36.  
  37. /*
  38.  * The bitmask for a lookup event:
  39.  *  - follow links at the end
  40.  *  - require a directory
  41.  *  - ending slashes ok even for nonexistent files
  42.  *  - internal "there are more path compnents" flag
  43.  *  - locked when lookup done with dcache_lock held
  44.  *  - dentry cache is untrusted; force a real lookup
  45.  */
  46. #define LOOKUP_FOLLOW         1
  47. #define LOOKUP_DIRECTORY     2
  48. #define LOOKUP_CONTINUE         4
  49. #define LOOKUP_PARENT        16
  50. #define LOOKUP_REVAL        64
  51. /*
  52.  * Intent data
  53.  */
  54. #define LOOKUP_OPEN        0x0100
  55. #define LOOKUP_CREATE        0x0200
  56. #define LOOKUP_EXCL        0x0400
  57. #define LOOKUP_RENAME_TARGET    0x0800
  58.  
  59. extern int user_path_at(int, const char __user *, unsigned, struct path *);
  60.  
  61. #define user_path(name, path) user_path_at(AT_FDCWD, name, LOOKUP_FOLLOW, path)
  62. #define user_lpath(name, path) user_path_at(AT_FDCWD, name, 0, path)
  63. #define user_path_dir(name, path) \
  64.     user_path_at(AT_FDCWD, name, LOOKUP_FOLLOW | LOOKUP_DIRECTORY, path)
  65.  
  66. extern int kern_path(const char *, unsigned, struct path *);
  67.  
  68. extern int path_lookup(const char *, unsigned, struct nameidata *);
  69. extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
  70.                const char *, unsigned int, struct nameidata *);
  71.  
  72. extern int path_lookup_open(int dfd, const char *name, unsigned lookup_flags, struct nameidata *, int open_flags);
  73. extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
  74.         int (*open)(struct inode *, struct file *));
  75. extern struct file *nameidata_to_filp(struct nameidata *nd, int flags);
  76. extern void release_open_intent(struct nameidata *);
  77.  
  78. extern struct dentry *lookup_one_len(const char *, struct dentry *, int);
  79. extern struct dentry *lookup_one_noperm(const char *, struct dentry *);
  80.  
  81. extern int follow_down(struct vfsmount **, struct dentry **);
  82. extern int follow_up(struct vfsmount **, struct dentry **);
  83.  
  84. extern struct dentry *lock_rename(struct dentry *, struct dentry *);
  85. extern void unlock_rename(struct dentry *, struct dentry *);
  86.  
  87. struct dentry * __lookup_hash(struct qstr *name, struct dentry * base, struct nameidata *nd);
  88.  
  89. static inline void nd_set_link(struct nameidata *nd, char *path)
  90. {
  91.     nd->saved_names[nd->depth] = path;
  92. }
  93.  
  94. static inline char *nd_get_link(struct nameidata *nd)
  95. {
  96.     return nd->saved_names[nd->depth];
  97. }
  98.  
  99. #endif /* _LINUX_NAMEI_H */
  100.